package com.sunwayhorizo.health.business.patad.integration.query;

import java.util.List;

import javax.ejb.Local;

import com.sunwayhorizo.health.hl7.common.Hl7Exception;
import com.sunwayhorizo.health.hl7.rim.PatientEncounter;

@Local
public interface PatientQualityControlQueryLocal
{
    /**
     * 在院患者所有动作
     * 
     * @param workGroupId       工作组id
     * @param pageNo
     * @param pageSize
     * @return
     * @throws Hl7Exception
     */
    public List<PatientEncounter> findInPatientByWorkGroupId(String workGroupId, int pageNo, int pageSize) throws Hl7Exception;

    /**
     * 查询出在院患者总记录数
     * 
     * @param workGroupId       工作组id
     * @return long
     * @throws Hl7Exception
     */
    public Long findCountInPatientByWorkGroupId(String workGroupId) throws Hl7Exception;
    
    /**
     * 根据工作组，病危情况，手术情况，输血情况，查询带有分页的患者；
     * @param wgId                      工作组Id
     * @param criticalCode              病危情况Code
     * @param surgeryCode               手术情况Code
     * @param transfuseCode             输血情况Code    
     * @param leaveHospitalWayCode      出院方式Code
     * @param pageNo                    页码
     * @param pageSize                  每页的数量
     * @return                          返回查询的患者信息
     * @throws Hl7Exception
     */
    public List<PatientEncounter> findInPatientByWorkGroupIdByCond(String wgId, String criticalCode, String surgeryCode, String transfuseCode,int pageNo, 
        int pageSize) throws Hl7Exception;

    /**
     * 根据工作组，病危情况，手术情况，输血情况，查询患者的总数量；
     * @param wgId                      工作组Id
     * @param criticalCode              病危情况Code
     * @param surgeryCode               手术情况Code
     * @param transfuseCode             输血情况Code    
     * @param leaveHospitalWayCode      出院方式Code
     * @return                          返回查询的患者总数量
     * @throws Hl7Exception
     */
    public Long findCountInPatientByWorkGroupIdByCond(String wgId,String criticalCode,String surgeryCode,String transfuseCode) throws Hl7Exception;
    
    /**
     * 根据工作组，出院方式，查询带有分页的患者；
     * @param wgId                      工作组Id
     * @param leaveHospitalConceptCode  出院方式的值，在术语中，1 正常，2 转院，3 死亡
     * @param startTime                 起始时间
     * @param endTime                   结束时间
     * @param pageNo                    页码
     * @param pageSize                  每页的数量
     * @return                          返回查询的患者信息
     * @throws Hl7Exception
     */
    public List<PatientEncounter> findOutPatientByWorkGroupIdByCond(String wgId, String leaveHospitalWayCode, String leaveHospitalConceptCode,
        String startTime,String endTime, int pageNo, int pageSize) throws Hl7Exception;
    /**
     * 根据工作组，病危情况，手术情况，输血情况，出院方式，查询患者的总数量；
     * @param wgId                      工作组Id
     * @param leaveHospitalConceptCode  出院方式的值，在术语中，1 正常，2 转院，3 死亡
     * @param startTime                 起始时间
     * @param endTime                   结束时间
     * @return                          返回查询的患者总数量
     * @throws Hl7Exception
     */
    
    public Long findCountOutPatientByWorkGroupIdByCond(String wgId, String leaveHospitalWayCode, String leaveHospitalConceptCode,String startTime,
        String endTime) throws Hl7Exception;
    
    /**
     * 查询入院跟踪或不被跟踪的，带有分页的患者列表
     * @param workGroupId       工作组Id
     * @param trackFlag         跟踪情况 ：0未被跟踪 1已被跟踪
     * @param pageNo            页码
     * @param pageSize          每页的数量
     * @return                  返回查询的患者
     * @throws Hl7Exception
     */
    public List<PatientEncounter> findInPatientByWorkGroupIdAndTrackFlag(String workGroupId, String trackFlag, int pageNo, int pageSize)
        throws Hl7Exception;

    /**
     * 查询入院跟踪或不被跟踪的患者总数量
     * @param workGroupId       工作组Id
     * @param trackFlag         跟踪情况 ：0未被跟踪 1已被跟踪
     * @return                  返回查询的患者总数量
     * @throws Hl7Exception
     */
    public Long findCountInPatientByWorkGroupIdAndTrackFlag(String workGroupId, String trackFlag) throws Hl7Exception;
    
    /**
     * 根据动作Id查询患者动作
     * @param actId            动作Id
     * @return
     * @throws Hl7Exception
     */
    public PatientEncounter findPatientEncounterByActId(String actId) throws Hl7Exception;
}
